package templ;

import impl.Employee;
import impl.Relative;
import java.util.List;

/**
 * A classe AbstractCore define os métodos que o núcleo do sistema deve oferecer para 
 * a interface gráfica.
 * A interface irá utilizar os métodos fornecidos pelo núcleo para trabalhar.
 * @author Lucas
 */
public abstract class AbstractCore {

    //Manipulação de funcionário    
    public abstract boolean addEmployee(String name, int age, double salary);
    
    public abstract boolean addRelative(String name, int age, String employeeName);

    public abstract boolean removeEmployee(int employeeID);
    
    public abstract boolean removeRelative(int relativeID);

    public abstract boolean editEmployee(int employeeID, String newName, int newAge, double newSalary);

    public abstract boolean editRelative(int relativeID, String newName, int newAge, int newEmployeeID);

    public abstract List<Employee> searchEmployeeByName(List<Employee> e, String name) throws Exception;
    
    public abstract List<Employee> searchEmployeeByAge(List<Employee> e, int minAge, int maxAge) throws Exception;
    
    public abstract List<Employee> searchEmployeeBySalary(List<Employee> e, double minSalary, double maxSalary) throws Exception;
    
    public abstract List<Employee> searchEmployeeByRelatives(List<Employee> e, int minRelatives, int maxRelatives) throws Exception;
   
    public abstract List<Relative> searchRelativeByName(List<Relative> r, String name) throws Exception;
    
    public abstract List<Relative> searchRelativeByAge(List<Relative> r, int minAge, int maxAge) throws Exception;
    
    
    
}
